#ifndef _DRV_OLED_H_
#define _DRV_OLED_H_

#include <stdint.h>

// 设备地址（含读写位）
#define OLED_Device_Address	0x78

// 命令寄存器地址
#define CMD_REG_ADDRESS		0x00
// 数据寄存器地址
#define DATA_REG_ADDRESS	0x40


#define SCREEN_PAGE_NUM		8	// 屏幕页数
#define SCREEN_PAGEDATA_NUM	128	// 每页的数据个数
#define SCREEN_ROW			64	// 列数
#define SCREEN_COLUMN		128	// 行数

/**
***********************************************************
* @brief I2C硬件初始化
* @param
* @return 
***********************************************************
*/
void OLED_DrvInit(void);

/**
***********************************************************
* @brief 开启OLED显示
* @param
* @return 
***********************************************************
*/    
void OLED_DisplayOn(void);

/**
***********************************************************
* @brief 关闭OLED显示
* @param
* @return 
***********************************************************
*/    
void OLED_DisplayOff(void);

/**
***********************************************************
* @brief 清屏显示
* @param
* @return 
***********************************************************
*/ 
void OLED_Clear(void);

/**
 * ************************************************************************
 * @brief 更新数据缓冲区
 * ************************************************************************
 */
void OLED_RefreshRAM(void);

/**
 * ************************************************************************
 * @brief 清除数据缓冲区
 * ************************************************************************
 */
void OLED_ClearRAM(void);

/**
 * ************************************************************************
 * @brief 设置坐标像素点数据
 * 
 * @param[in] x  			起始点横坐标(x:0~127）
 * @param[in] y  			起始点纵坐标(y:0~63）
 * @param[in] set_pixel  	该点的数据  SET_PIXEL = 1, RESET_PIXEL = 0
 * 
 * ************************************************************************
 */
void OLED_SetPixel(int16_t x, int16_t y, uint8_t set_pixel);

/**
 * ************************************************************************
 * @brief 屏幕内容取反显示
 * 
 * @param[in] mode  开关
 * 					开	ON	0xA7	点亮全屏
 *  				关	OFF	0xA6	默认此模式，设置像素点亮
 * 
 * ************************************************************************
 */
void OLED_DisplayMode(uint8_t mode);

/**
 * ************************************************************************
 * @brief 屏幕亮度调节
 * 
 * @param[in] intensity  亮度大小（0~255），默认为0x7f
 * 
 * ************************************************************************
 */
void OLED_IntensityControl(uint8_t intensity);

/**
 * ************************************************************************
 * @brief 全屏内容偏移指定距离
 * 
 * @param[in] shift_num  偏移距离（0~63）
 * 
 * ************************************************************************
 */
void OLED_Shift(uint8_t shift_num);

/**
 * ************************************************************************
 * @brief 屏幕内容水平方向滚动播放
 * 
 * @param[in] start_page  	开始页数	(0~7)
 * @param[in] end_page  	结束页数	(0~7)
 * @param[in] direction  	滚动方向
 * 								左		LEFT	0x27
 * 								右		RIGHT	0x26
 * @note 在开始页数和结束页数之间的内容才会滚动播放，且写命令顺序不得改变
 * ************************************************************************
 */
void OLED_HorizontalShift(uint8_t start_page,uint8_t end_page,uint8_t direction);


#endif
